﻿// Copyright 2007-2008 Rory Plaire (codekaizen@gmail.com)

using System;

namespace NPack.Interfaces
{
    /// <summary>
    /// An interface for an eigenvalue decomposition of a matrix.
    /// </summary>
    /// <typeparam name="T">Type of component in the matrix.</typeparam>
    public interface IEigenvalueDecomposition<T, TMatrix> : IFactorization<T, TMatrix>
        where T : IEquatable<T>, IComparable<T>, IComputable<T>, IConvertible
        where TMatrix : IMatrix<T>, IEquatable<TMatrix>, IComparable<TMatrix>, IComputable<TMatrix>
    {
        TMatrix DiagonalMatrix { get; }
        TMatrix EigenvectorMatrix { get; }
        T[] ImaginaryEigenvalues { get; }
        T[] RealEigenvalues { get; }
    }
}